/**
 * Copyright &copy; 2013-2015 山东易科德软件有限公司 All rights reserved.
 */
package cn.net.ecode.modules.sys.utils;

import java.util.Map;

import cn.net.ecode.common.utils.CacheUtils;
import cn.net.ecode.common.utils.SpringContextHolder;
import cn.net.ecode.modules.sys.dao.ModuleDao;
import cn.net.ecode.modules.sys.entity.Module;

import com.google.common.collect.Maps;

/**
 * 模块工具类
 * @author ThinkGem
 * @version 2014-12-11
 */
public class ModuleUtils {
	
	private static ModuleDao moduleDao = SpringContextHolder.getBean(ModuleDao.class);

	public static final String CACHE_MODULE_MAP = "moduleMap";
	
	/**
	 * 根据编码获取模块
	 * @param moduleCode
	 * @return
	 */
	public synchronized static Module getModule(String moduleCode){
		@SuppressWarnings("unchecked")
		Map<String, Module> moduleMap = (Map<String, Module>)CacheUtils.get(CACHE_MODULE_MAP);
		if (moduleMap == null){
			moduleMap = Maps.newHashMap();
			for (Module module : moduleDao.findList(new Module())){
				// 如果没有加载模块，则更新菜单为禁用状态
				if (!module.getIsLoader()){
					module.setStatus(Module.STATUS_DISABLE);
					moduleDao.updateMenuStatus(module);
				}
				// 如果已加载，并改模块为启动状态，则更新菜单为启用状态
				else if (module.getIsEnable()){
					module.setStatus(Module.STATUS_NORMAL);
					moduleDao.updateMenuStatus(module);
				} 
				moduleMap.put(module.getModuleCode(), module);
			}
			CacheUtils.put(CACHE_MODULE_MAP, moduleMap);
		}
		Module module = moduleMap.get(moduleCode);
		if (module == null){
			module = new Module();
		}
		return module;
	}
	
	/**
	 * 清理缓存
	 */
	public static void clearCache(){
		CacheUtils.remove(CACHE_MODULE_MAP);
	}
	
}
